from flask import current_app
from flask import g
from flask import session
from info.models import User


# 自定义过滤器(用于点击排行)
def index_filter(index):
    if index == 1:
        return 'first'
    elif index == 2:
        return 'second'
    elif index == 3:
        return 'third'
    else:
        return ''

import functools


# 装饰器(检查用户登录状态)
def login_required(f):
    # 让被装饰的函数名重新赋值给内部函数
    @functools.wraps(f)
    def wrapper(*args, **kwargs):
        # 从redis中获取user_id
        user_id = session.get('user_id')
        # 判断user_id是否存在(是否登录)(检查用户登录状态)
        # 如果存在，查询mysql
        user = None  # 防止出现异常后后面调用报错
        if user_id:
            try:
                user = User.query.get(user_id)
            except Exception as e:
                current_app.logger.error(e)
        # 使用应用上下文对象g存储请求过程中的临时数据
        g.user = user
        return f(*args, **kwargs)
    # # 在返回内部函数前，让被装饰的函数名重新赋值给内部函数
    # # 否则被装饰的函数名会发生改变(wrapper)
    # wrapper.__name__ = f.__name__
    return wrapper